What is @trpc/server?
@trpc/server is a TypeScript-first framework for building end-to-end typesafe APIs. It allows you to create APIs where the client and server share the same type definitions, ensuring type safety across the entire stack.
What are @trpc/server's main functionalities?
Creating a Router
This code demonstrates how to create a basic router with a single procedure using @trpc/server. The `greeting` procedure returns a simple 'Hello, world!' message.
const { initTRPC } = require('@trpc/server');
const t = initTRPC.create();
const appRouter = t.router({
greeting: t.procedure.query(() => 'Hello, world!'),
});
module.exports = { appRouter };
Creating Procedures
This code shows how to create a procedure that takes input and performs an operation. The `add` procedure takes two numbers as input and returns their sum.
const { initTRPC } = require('@trpc/server');
const t = initTRPC.create();
const appRouter = t.router({
add: t.procedure.input((z) => z.object({ a: z.number(), b: z.number() })).query(({ input }) => input.a + input.b),
});
module.exports = { appRouter };
Middleware
This code demonstrates how to use middleware in @trpc/server. The `isAuthed` middleware checks if the user is authenticated before allowing access to the `secretData` procedure.
const { initTRPC } = require('@trpc/server');
const t = initTRPC.create();
const isAuthed = t.middleware(({ ctx, next }) => {
if (!ctx.user) {
throw new Error('Not authenticated');
}
return next();
});
const appRouter = t.router({
secretData: t.procedure.use(isAuthed).query(() => 'Secret data'),
});
module.exports = { appRouter };
Other packages similar to @trpc/server
express
Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications. Unlike @trpc/server, Express does not provide built-in type safety and requires additional libraries for type checking and validation.
apollo-server
Apollo Server is a community-driven, open-source GraphQL server that works with any GraphQL schema. It provides a powerful way to build a GraphQL API with type safety, but it requires a different approach compared to @trpc/server, which is more focused on TypeScript and end-to-end type safety.
nestjs
NestJS is a progressive Node.js framework for building efficient, reliable, and scalable server-side applications. It uses TypeScript by default and provides a lot of built-in features, including dependency injection and a modular architecture. However, it is more heavyweight compared to @trpc/server.